from django.shortcuts import render
from rest_framework.viewsets import ReadOnlyModelViewSet

from .models import Area
from .serializers import AreaSerializer, SubAreaSerializer

# Create your views here.

# 1）请求省份数据
#
# 请求方式 GET /areas/infos/
#
# 2）请求城市或区县数据
#
# 请求方式 GET/areas/infos/(?P<pk>\d+)/
# 获取地区信息接口，模型类采用自关联方式
from rest_framework_extensions.cache.mixins import CacheResponseMixin


class AreasViewSet(CacheResponseMixin, ReadOnlyModelViewSet):
    """
    行政区划信息
    """
    pagination_class = None  # 区划信息不分页

    def get_queryset(self):
        """
        提供数据集
        因为省级信息需要筛选且不需要传递ｐｋ　friter(parent=None)，但
        而市县级信息只需要传递ｐｋ，
        由于情况不同，需要的查询结果集不同，所以重写get_queryser()方法
        """
        if self.action == 'list':
            return Area.objects.filter(parent=None)
        else:
            return Area.objects.all()

    def get_serializer_class(self):
        """
        提供序列化器
        序列化器也是相同的，因为是自关联，
        当需要获取省级数据时，不需要 area_set这个字段
        而获取市，县级数据时，就需要　area_set这个字段
        所以查询需求不同是，需要的序列化器也不同，所以重写get_serializer_class()方法

        """
        if self.action == 'list':
            return AreaSerializer
        else:
            return SubAreaSerializer
